package config

import (
	"fmt"
)

// SecureKeyManager 安全密钥管理器
type SecureKeyManager struct {
	masterKey []byte
}

// Platform-specific methods are implemented in:
// - secure_key_windows.go for Windows
// - secure_key_linux.go for Linux

// NewSecureKeyManager 创建新的安全密钥管理器
func NewSecureKeyManager() *SecureKeyManager {
	return &SecureKeyManager{}
}

// Initialize 初始化安全密钥管理器
func (skm *SecureKeyManager) Initialize() error {
	return skm.initialize()
}

// GetMasterKey 获取主密钥
func (skm *SecureKeyManager) GetMasterKey() ([]byte, error) {
	if skm.masterKey != nil {
		return skm.masterKey, nil
	}
	return skm.getMasterKey()
}

// 以下方法由平台特定的文件实现
// initialize - 系统初始化 (在 secure_key_windows.go 和 secure_key_linux.go 中实现)
// getMasterKey - 获取主密钥 (在 secure_key_windows.go 和 secure_key_linux.go 中实现)
// saveMasterKey - 保存主密钥 (在 secure_key_windows.go 和 secure_key_linux.go 中实现)

// RotateMasterKey 轮换主密钥
func (skm *SecureKeyManager) RotateMasterKey() error {
	// 首先解密所有现有配置
	oldKey := skm.masterKey
	if oldKey == nil {
		return fmt.Errorf("主密钥未初始化")
	}

	users, err := LoadAllUserConfigs(oldKey)
	if err != nil {
		return fmt.Errorf("加载用户配置失败: %v", err)
	}

	// 生成新的主密钥
	newKey, err := GenerateEncryptionKey()
	if err != nil {
		return fmt.Errorf("生成新主密钥失败: %v", err)
	}

	// 使用新密钥重新加密所有配置
	for _, user := range users {
		if err := SaveUserConfig(user, newKey); err != nil {
			return fmt.Errorf("重新加密用户配置失败: %v", err)
		}
	}

	// 保存新的主密钥
	if err := skm.saveMasterKey(newKey); err != nil {
		return fmt.Errorf("保存新主密钥失败: %v", err)
	}

	skm.masterKey = newKey
	return nil
}
